package action.chap6;

import action.chap4.Dish;
import action.chap4.DishUtils;

import java.util.List;
import java.util.Map;

import static java.util.stream.Collectors.*;

/**
 * 分区的好处在于保留了分区函数返回true或false的两套流元素列表。在上一个例子中，要
 * 得到非素食Dish的List，你可以使用两个筛选操作来访问partitionedMenu这个Map中false
 * 键的值：一个利用谓词，一个利用该谓词的非。
 */
public class Demo64 {
    public static void main(String[] args) {
        //分区是分组的特殊情况：由一个谓词（返回一个布尔值的函数）作为分类函数，它称分区函
        //数。分区函数返回一个布尔值，这意味着得到的分组Map的键类型是Boolean，于是它最多可以
        //分为两组——true是一组，false是一组。
        List<Dish> menus = DishUtils.getListDish();
        Map<Boolean, List<Dish>> collect = menus.stream().collect(partitioningBy(Dish::isVegetarian));
        List<Dish> dishes = collect.get(true);

        List<Dish> collect1 = menus.stream().filter(Dish::isVegetarian).collect(toList());
    }
}
